package com.bn.feeds.catalog.configurations;

import java.util.List;
import java.util.Map;

import atg.nucleus.GenericService;

/**
 * The CatalogFeedConfigurations class contains configuration information required by the initial catalog import feed service.
 */
public class CatalogFeedConfigurations extends GenericService {

    /**
     * Holds the path for processing SKU files.
     */
    private String skuMasterFilePath;

    /**
     * Holds the path for processing Category files.
     */
    private String catMasterFilePath;

    /**
     * Holds the path for processing Product files.
     */
    private String productMasterFilePath;

    /**
     * Holds the path for processing Price List files.
     */
    private String priceListFilePath;

    /**
     * Holds the separator character for each row column.
     */
    private String fileDelimeter;

    /**
     * If a column has multiple values this will be the separator character, e.g. the parent categories for products.
     */
    private String listDelimeter;

    /**
     * Holds the columnDelimeter.
     */
    private String columnDelimeter;

    /**
     * Holds the categoryTemplate.
     */
    private String categoryTemplate;

    /**
     * Holds the subCategoryTemplate.
     */
    private String subCategoryTemplate;

    /**
     * Holds the productDetailTemplate.
     */
    private String productDetailTemplate;

    /**
     * Holds the productWithPickerTypeTemplate.
     */
    private String productWithPickerTypeTemplate;

    /**
     * Holds the productWithPickerNoTypeTemplate.
     */
    private String productWithPickerNoTypeTemplate;

    /**
     * Holds the processedCatFileLocation.
     */
    private String processedCatFileLocation;

    /**
     * Holds the processedProdFileLocation.
     */
    private String processedProdFileLocation;

    /**
     * Holds the processedSkuFileLocation.
     */
    private String processedSkuFileLocation;

    /**
     * Holds the processPricelistFileLocation.
     */
    private String processPricelistFileLocation;

    /**
     * Holds the rootCategoryId.
     */
    private String rootCategoryId;

    /**
     * Holds the productTiresTemplate.
     */
    private String productTiresTemplate;

    /**
     * Holds the giftCertificateProductTemplate.
     */
    private String giftCertificateProductTemplate;

    /**
     * Holds the availableInStoreOnlyTemplate.
     */
    private String availableInStoreOnlyTemplate;

    /**
     * Holds the giftCertificateCategoryTemplate.
     */
    private String giftCertificateCategoryTemplate;

    /**
     * holds the path to save error log files.
     */
    private String errorFileLocation;

    /**
     * specifies the initial line, e.g. we could start processing in line 1 and the line 0 could be the column names or instructions
     */
    private int initialLine;

    /**
     * Holds the categoryMasterPropertyMapping.
     */
    private Map<String, String> categoryMasterPropertyMapping;

    /**
     * Holds the priceListMasterPropertyMapping.
     */
    private Map<String, String> priceListMasterPropertyMapping;

    /**
     * Holds the productMasterPropertyMapping.
     */
    private Map<String, String> productMasterPropertyMapping;

    /**
     * Holds the skuMasterPropertyMapping.
     */
    private Map<String, String> skuMasterPropertyMapping;

    /**
     * Holds the priceListDisplayName.
     */
    private String priceListDisplayName;

    /**
     * Holds the taskListForAutoPublish.
     */
    private List<String> taskListForAutoPublish;

    /**
     * Holds the activeAutoPublish.
     */
    private boolean activeAutoPublish;

    /**
     * Holds the workFlowNameForAutomaticPublic.
     */
    private String workFlowNameForAutomaticPublic;

    /**
     * Holds the bcc user name for the file project.
     */
    private String mUserName;

    /**
     * Holds the name of the initial project.
     */
    private String mProjectNameForInitial;

    /**
     * Holds the name of the mRootCatalogId.
     */
    private String mRootCatalogId;

    /**
     * Holds the name of the workflow.
     */
    private String mWorkFlowName;

    /**
     * Holds the emailRecipientsAlert.
     */
    private List<String> emailRecipientsAlert;

    /**
     * Holds the emailRecipientsInfo.
     */
    private List<String> emailRecipientsInfo;

    /**
     * Holds the emailFromAlert.
     */
    private String emailFromAlert;

    /**
     * Holds the emailSubjecAlert.
     */
    private String emailSubjecAlert;

    /**
     * Holds the emailSubjecInfo.
     */
    private String emailSubjecInfo;

    /**
     * Holds the thresholdSkus.
     */
    private int thresholdSkus;

    /**
     * Holds the waitTimeOutPerProjectSeconds.
     */
    private int waitTimeOutPerProjectSeconds;

    /**
     * Holds the waitTryNumber.
     */
    private int waitTryNumber;

    /**
     * Holds the executeCheckSanityTargets.
     */
    private boolean executeCheckSanityTargets;

    /**
     * List of properties requiered for creation of a category by the feed.
     */
    private List<String> categoryRequiredProperties;

    /**
     * List of properties requiered for creation of a product by the feed.
     */
    private List<String> productRequiredProperties;

    /**
     * List of properties requiered for creation of a sku by the feed.
     */
    private List<String> skuRequiredProperties;

    /**
     * List of properties requiered for creation of a priceList by the feed.
     */
    private List<String> priceListRequiredProperties;

    // Gets & Sets

    /**
     * @return the categoryMasterPropertyMapping
     */
    public Map<String, String> getCategoryMasterPropertyMapping() {
        return categoryMasterPropertyMapping;
    }

    /**
     * @param categoryMasterPropertyMapping
     *            the categoryMasterPropertyMapping to set
     */
    public void setCategoryMasterPropertyMapping(final Map<String, String> categoryMasterPropertyMapping) {
        this.categoryMasterPropertyMapping = categoryMasterPropertyMapping;
    }

    /**
     * @return the priceListMasterPropertyMapping
     */
    public Map<String, String> getPriceListMasterPropertyMapping() {
        return priceListMasterPropertyMapping;
    }

    /**
     * @param priceListMasterPropertyMapping
     *            the priceListMasterPropertyMapping to set
     */
    public void setPriceListMasterPropertyMapping(final Map<String, String> priceListMasterPropertyMapping) {
        this.priceListMasterPropertyMapping = priceListMasterPropertyMapping;
    }

    /**
     * @return the productMasterPropertyMapping
     */
    public Map<String, String> getProductMasterPropertyMapping() {
        return productMasterPropertyMapping;
    }

    /**
     * @param productMasterPropertyMapping
     *            the productMasterPropertyMapping to set
     */
    public void setProductMasterPropertyMapping(final Map<String, String> productMasterPropertyMapping) {
        this.productMasterPropertyMapping = productMasterPropertyMapping;
    }

    /**
     * @return the skuMasterPropertyMapping
     */
    public Map<String, String> getSkuMasterPropertyMapping() {
        return skuMasterPropertyMapping;
    }

    /**
     * @param skuMasterPropertyMapping
     *            the skuMasterPropertyMapping to set
     */
    public void setSkuMasterPropertyMapping(final Map<String, String> skuMasterPropertyMapping) {
        this.skuMasterPropertyMapping = skuMasterPropertyMapping;
    }

    /**
     * @return the skuMasterFilePath
     */
    public String getSkuMasterFilePath() {
        return skuMasterFilePath;
    }

    /**
     * @param skuMasterFilePath
     *            the skuMasterFilePath to set
     */
    public void setSkuMasterFilePath(final String skuMasterFilePath) {
        this.skuMasterFilePath = skuMasterFilePath;
    }

    /**
     * @return the catMasterFilePath
     */
    public String getCatMasterFilePath() {
        return catMasterFilePath;
    }

    /**
     * @param catMasterFilePath
     *            the catMasterFilePath to set
     */
    public void setCatMasterFilePath(final String catMasterFilePath) {
        this.catMasterFilePath = catMasterFilePath;
    }

    /**
     * @return the productMasterFilePath
     */
    public String getProductMasterFilePath() {
        return productMasterFilePath;
    }

    /**
     * @param productMasterFilePath
     *            the productMasterFilePath to set
     */
    public void setProductMasterFilePath(final String productMasterFilePath) {
        this.productMasterFilePath = productMasterFilePath;
    }

    /**
     * @return the priceListFilePath
     */
    public String getPriceListFilePath() {
        return priceListFilePath;
    }

    /**
     * @param priceListFilePath
     *            the priceListFilePath to set
     */
    public void setPriceListFilePath(final String priceListFilePath) {
        this.priceListFilePath = priceListFilePath;
    }

    /**
     * @return the fileDelimeter
     */
    public String getFileDelimeter() {
        return fileDelimeter;
    }

    /**
     * @param fileDelimeter
     *            the fileDelimeter to set
     */
    public void setFileDelimeter(final String fileDelimeter) {
        this.fileDelimeter = fileDelimeter;
    }

    /**
     * @return the ListDelimeter
     */
    public String getListDelimeter() {
        return listDelimeter;
    }

    /**
     * @param listDelimeter
     *            the list delimiter to set
     */
    public void setListDelimeter(final String listDelimeter) {
        this.listDelimeter = listDelimeter;
    }

    /**
     * @return the categoryTemplate
     */
    public String getCategoryTemplate() {
        return categoryTemplate;
    }

    /**
     * @param categoryTemplate
     *            the categoryTemplate to set
     */
    public void setCategoryTemplate(final String categoryTemplate) {
        this.categoryTemplate = categoryTemplate;
    }

    /**
     * @return the subCategoryTemplate
     */
    public String getSubCategoryTemplate() {
        return subCategoryTemplate;
    }

    /**
     * @param subCategoryTemplate
     *            the subCategoryTemplate to set
     */
    public void setSubCategoryTemplate(final String subCategoryTemplate) {
        this.subCategoryTemplate = subCategoryTemplate;
    }

    /**
     * @return the productDetailTemplate
     */
    public String getProductDetailTemplate() {
        return productDetailTemplate;
    }

    /**
     * @param productDetailTemplate
     *            the productDetailTemplate to set
     */
    public void setProductDetailTemplate(final String productDetailTemplate) {
        this.productDetailTemplate = productDetailTemplate;
    }

    /**
     * @return the productWithPickerTypeTemplate
     */
    public String getProductWithPickerTypeTemplate() {
        return productWithPickerTypeTemplate;
    }

    /**
     * @param productWithPickerTypeTemplate
     *            the productWithPickerTypeTemplate to set
     */
    public void setProductWithPickerTypeTemplate(final String productWithPickerTypeTemplate) {
        this.productWithPickerTypeTemplate = productWithPickerTypeTemplate;
    }

    /**
     * @return the productWithPickerNoTypeTemplate
     */
    public String getProductWithPickerNoTypeTemplate() {
        return productWithPickerNoTypeTemplate;
    }

    /**
     * @param productWithPickerNoTypeTemplate
     *            the productWithPickerNoTypeTemplate to set
     */
    public void setProductWithPickerNoTypeTemplate(final String productWithPickerNoTypeTemplate) {
        this.productWithPickerNoTypeTemplate = productWithPickerNoTypeTemplate;
    }

    /**
     * @return the processedCatFileLocation
     */
    public String getProcessedCatFileLocation() {
        return processedCatFileLocation;
    }

    /**
     * @param processedCatFileLocation
     *            the processedCatFileLocation to set
     */
    public void setProcessedCatFileLocation(final String processedCatFileLocation) {
        this.processedCatFileLocation = processedCatFileLocation;
    }

    /**
     * @return the processedProdFileLocation
     */
    public String getProcessedProdFileLocation() {
        return processedProdFileLocation;
    }

    /**
     * @param processedProdFileLocation
     *            the processedProdFileLocation to set
     */
    public void setProcessedProdFileLocation(final String processedProdFileLocation) {
        this.processedProdFileLocation = processedProdFileLocation;
    }

    /**
     * @return the processedSkuFileLocation
     */
    public String getProcessedSkuFileLocation() {
        return processedSkuFileLocation;
    }

    /**
     * @param processedSkuFileLocation
     *            the processedSkuFileLocation to set
     */
    public void setProcessedSkuFileLocation(final String processedSkuFileLocation) {
        this.processedSkuFileLocation = processedSkuFileLocation;
    }

    /**
     * @return the processPricelistFileLocation
     */
    public String getProcessPricelistFileLocation() {
        return processPricelistFileLocation;
    }

    /**
     * @param processPricelistFileLocation
     *            the processPricelistFileLocation to set
     */
    public void setProcessPricelistFileLocation(final String processPricelistFileLocation) {
        this.processPricelistFileLocation = processPricelistFileLocation;
    }

    /**
     * @return the columnDelimeter
     */
    public String getColumnDelimeter() {
        return columnDelimeter;
    }

    /**
     * @param columnDelimeter
     *            the columnDelimeter to set
     */
    public void setColumnDelimeter(final String columnDelimeter) {
        this.columnDelimeter = columnDelimeter;
    }

    /**
     * @return the rootCategoryId
     */
    public String getRootCategoryId() {
        return rootCategoryId;
    }

    /**
     * @param rootCategoryId
     *            the rootCategoryId to set
     */
    public void setRootCategoryId(final String rootCategoryId) {
        this.rootCategoryId = rootCategoryId;
    }

    /**
     * @return the productTiresTemplate
     */
    public String getProductTiresTemplate() {
        return productTiresTemplate;
    }

    /**
     * @param productTiresTemplate
     *            the productTiresTemplate to set
     */
    public void setProductTiresTemplate(final String productTiresTemplate) {
        this.productTiresTemplate = productTiresTemplate;
    }

    /**
     * @return the giftCertificateProductTemplate
     */
    public String getGiftCertificateProductTemplate() {
        return giftCertificateProductTemplate;
    }

    /**
     * @param giftCertificateProductTemplate
     *            the giftCertificateProductTemplate to set
     */
    public void setGiftCertificateProductTemplate(final String giftCertificateProductTemplate) {
        this.giftCertificateProductTemplate = giftCertificateProductTemplate;
    }

    /**
     * @return the availableInStoreOnlyTemplate
     */
    public String getAvailableInStoreOnlyTemplate() {
        return availableInStoreOnlyTemplate;
    }

    /**
     * @param availableInStoreOnlyTemplate
     *            the availableInStoreOnlyTemplate to set
     */
    public void setAvailableInStoreOnlyTemplate(final String availableInStoreOnlyTemplate) {
        this.availableInStoreOnlyTemplate = availableInStoreOnlyTemplate;
    }

    /**
     * @return the giftCertificateCategoryTemplate
     */
    public String getGiftCertificateCategoryTemplate() {
        return giftCertificateCategoryTemplate;
    }

    /**
     * @param giftCertificateCategoryTemplate
     *            the giftCertificateCategoryTemplate to set
     */
    public void setGiftCertificateCategoryTemplate(final String giftCertificateCategoryTemplate) {
        this.giftCertificateCategoryTemplate = giftCertificateCategoryTemplate;
    }

    /**
     * @return the mWorkFlowName
     */
    public String getWorkFlowName() {
        return mWorkFlowName;
    }

    /**
     * @param workFlowName
     *            the mWorkFlowName to set
     */
    public void setWorkFlowName(final String workFlowName) {
        this.mWorkFlowName = workFlowName;
    }

    /**
     * @return the mUserName
     */
    public String getUserName() {
        return mUserName;
    }

    /**
     * @param userName
     *            the mUserName to set
     */
    public void setUserName(final String userName) {
        this.mUserName = userName;
    }

    /**
     * @return the mProjectNameForInitial
     */
    public String getProjectNameForInitial() {
        return mProjectNameForInitial;
    }

    /**
     * @param projectNameForInitial
     *            the projectNameForInitial to set
     */
    public void setProjectNameForInitial(final String projectNameForInitial) {
        this.mProjectNameForInitial = projectNameForInitial;
    }

    /**
     * @return the mRootCatalogId
     */
    public String getRootCatalogId() {
        return mRootCatalogId;
    }

    /**
     * @param rootCatalogId
     *            the rootCatalogId to set
     */
    public void setRootCatalogId(final String rootCatalogId) {
        this.mRootCatalogId = rootCatalogId;
    }

    /**
     * @return the errorFileLocation
     */
    public String getErrorFileLocation() {
        return errorFileLocation;
    }

    /**
     * @param errorFileLocation
     *            the errorFileLocation to set
     */
    public void setErrorFileLocation(final String errorFileLocation) {
        this.errorFileLocation = errorFileLocation;
    }

    /**
     * This is used to determinate if we skip the first line.
     *
     * @return the initialLine
     */
    public int getInitialLine() {
        return initialLine;
    }

    /**
     * @param initialLine
     *            the initialLine to set
     */
    public void setInitialLine(final int initialLine) {
        this.initialLine = initialLine;
    }

    /**
     * @return the priceListDisplayName
     */
    public String getPriceListDisplayName() {
        return priceListDisplayName;
    }

    /**
     * @param priceListDisplayName
     *            the priceListDisplayName to set
     */
    public void setPriceListDisplayName(final String priceListDisplayName) {
        this.priceListDisplayName = priceListDisplayName;
    }

    /**
     * @return the taskListForAutoPublish
     */
    public List<String> getTaskListForAutoPublish() {
        return taskListForAutoPublish;
    }

    /**
     * @param taskListForAutoPublish
     *            the taskListForAutoPublish to set
     */
    public void setTaskListForAutoPublish(final List<String> taskListForAutoPublish) {
        this.taskListForAutoPublish = taskListForAutoPublish;
    }

    /**
     * @return the activeAutoPublish
     */
    public boolean isActiveAutoPublish() {
        return activeAutoPublish;
    }

    /**
     * @param activeAutoPublish
     *            the activeAutoPublish to set
     */
    public void setActiveAutoPublish(final boolean activeAutoPublish) {
        this.activeAutoPublish = activeAutoPublish;
    }

    /**
     * @return the workFlowNameForAutomaticPublic
     */
    public String getWorkFlowNameForAutomaticPublic() {
        return workFlowNameForAutomaticPublic;
    }

    /**
     * @param workFlowNameForAutomaticPublic
     *            the workFlowNameForAutomaticPublic to set
     */
    public void setWorkFlowNameForAutomaticPublic(final String workFlowNameForAutomaticPublic) {
        this.workFlowNameForAutomaticPublic = workFlowNameForAutomaticPublic;
    }

    // Gets & Sets Justice 1.6

    /**
     * @return the emailRecipientsAlert
     */
    public List<String> getEmailRecipientsAlert() {
        return emailRecipientsAlert;
    }

    /**
     * @param emailRecipientsAlert
     *            the emailRecipientsAlert to set
     */
    public void setEmailRecipientsAlert(final List<String> emailRecipientsAlert) {
        this.emailRecipientsAlert = emailRecipientsAlert;
    }

    /**
     * @return the emailRecipientsInfo
     */
    public List<String> getEmailRecipientsInfo() {
        return emailRecipientsInfo;
    }

    /**
     * @param emailRecipientsInfo
     *            the emailRecipientsInfo to set
     */
    public void setEmailRecipientsInfo(final List<String> emailRecipientsInfo) {
        this.emailRecipientsInfo = emailRecipientsInfo;
    }

    /**
     * @return the emailFromAlert
     */
    public String getEmailFromAlert() {
        return emailFromAlert;
    }

    /**
     * @param emailFromAlert
     *            the emailFromAlert to set
     */
    public void setEmailFromAlert(final String emailFromAlert) {
        this.emailFromAlert = emailFromAlert;
    }

    /**
     * @return the emailSubjecAlert
     */
    public String getEmailSubjecAlert() {
        return emailSubjecAlert;
    }

    /**
     * @param emailSubjecAlert
     *            the emailSubjecAlert to set
     */
    public void setEmailSubjecAlert(final String emailSubjecAlert) {
        this.emailSubjecAlert = emailSubjecAlert;
    }

    /**
     * @return the emailSubjecInfo
     */
    public String getEmailSubjecInfo() {
        return emailSubjecInfo;
    }

    /**
     * @param emailSubjecInfo
     *            the emailSubjecInfo to set
     */
    public void setEmailSubjecInfo(final String emailSubjecInfo) {
        this.emailSubjecInfo = emailSubjecInfo;
    }

    /**
     * @return the thresholdSkus
     */
    public int getThresholdSkus() {
        return thresholdSkus;
    }

    /**
     * @param thresholdSkus
     *            the thresholdSkus to set
     */
    public void setThresholdSkus(final int thresholdSkus) {
        this.thresholdSkus = thresholdSkus;
    }

    /**
     * @return the waitTimeOutPerProjectSeconds
     */
    public int getWaitTimeOutPerProjectSeconds() {
        return waitTimeOutPerProjectSeconds;
    }

    /**
     * @param waitTimeOutPerProjectSeconds
     *            the waitTimeOutPerProjectSeconds to set
     */
    public void setWaitTimeOutPerProjectSeconds(final int waitTimeOutPerProjectSeconds) {
        this.waitTimeOutPerProjectSeconds = waitTimeOutPerProjectSeconds;
    }

    /**
     * @return the waitTryNumber
     */
    public int getWaitTryNumber() {
        return waitTryNumber;
    }

    /**
     * @param waitTryNumber
     *            the waitTryNumber to set
     */
    public void setWaitTryNumber(final int waitTryNumber) {
        this.waitTryNumber = waitTryNumber;
    }

    /**
     * @return the executeCheckSanityTargets
     */
    public boolean isExecuteCheckSanityTargets() {
        return executeCheckSanityTargets;
    }

    /**
     * @param executeCheckSanityTargets
     *            the executeCheckSanityTargets to set
     */
    public void setExecuteCheckSanityTargets(final boolean executeCheckSanityTargets) {
        this.executeCheckSanityTargets = executeCheckSanityTargets;
    }

    /**
     * @return the categoryRequiredProperties
     */
    public List<String> getCategoryRequiredProperties() {
        return categoryRequiredProperties;
    }

    /**
     * @param categoryRequiredProperties the categoryRequiredProperties to set
     */
    public void setCategoryRequiredProperties(final List<String> categoryRequiredProperties) {
        this.categoryRequiredProperties = categoryRequiredProperties;
    }

    /**
     * @return the productRequiredProperties
     */
    public List<String> getProductRequiredProperties() {
        return productRequiredProperties;
    }

    /**
     * @param productRequiredProperties the productRequiredProperties to set
     */
    public void setProductRequiredProperties(final List<String> productRequiredProperties) {
        this.productRequiredProperties = productRequiredProperties;
    }

    /**
     * @return the skuRequiredProperties
     */
    public List<String> getSkuRequiredProperties() {
        return skuRequiredProperties;
    }

    /**
     * @param skuRequiredProperties the skuRequiredProperties to set
     */
    public void setSkuRequiredProperties(final List<String> skuRequiredProperties) {
        this.skuRequiredProperties = skuRequiredProperties;
    }

    /**
     * @return the priceListRequiredProperties
     */
    public List<String> getPriceListRequiredProperties() {
        return priceListRequiredProperties;
    }

    /**
     * @param priceListRequiredProperties the priceListRequiredProperties to set
     */
    public void setPriceListRequiredProperties(final List<String> priceListRequiredProperties) {
        this.priceListRequiredProperties = priceListRequiredProperties;
    }

}
